/**************************************************************************/
/*  EOSP                                                                  */
/*                                                                        */
/*  Copyright (c) 2013-2019                                               */
/*  All rights reserved.                                                  */
/*                                                                        */
/*  This project was developed by the SJQU Computer Department as part    */
/*  of the course 'Embedded Operation System Practice'.                   */
/*                                                                        */
/*  Redistribution and use in source and binary forms, with or without    */
/*  modification, are permitted provided that the following conditions    */
/*  are met:                                                              */
/*  1. Redistributions of source code must retain the above copyright     */
/*     notice, this list of conditions and the following disclaimer.      */
/*  2. Redistributions in binary form must reproduce the above copyright  */
/*     notice, this list of conditions and the following disclaimer in    */
/*     the documentation and/or other materials provided with the         */
/*     distribution.                                                      */
/*                                                                        */
/*  THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''    */
/*  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED     */
/*  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A       */
/*  PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR   */
/*  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,          */
/*  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES /INCLUDING, BUT NOT      */
/*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF      */
/*  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION/ HOWEVER CAUSED AND   */
/*  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,    */
/*  OR TORT /INCLUDING NEGLIGENCE OR OTHERWISE/ ARISING IN ANY WAY OUT    */
/*  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF    */
/*  SUCH DAMAGE.                                                          */
/**************************************************************************/
#include <includes.h>

static void TmrCallback (OS_TMR *p_tmr, void *p_arg)
{
  app_send_msg(APP_HEARTBEAT_MSG_ID, 0);
}

void AppHeartbeatTask(void *p_arg)
{
  OS_ERR err;
  OS_TMR tmr;
  
  OSTmrCreate ((OS_TMR              *)&tmr,
               (CPU_CHAR            *)"MySoftTimer",
               (OS_TICK              )20,
               (OS_TICK              )3000,                //10ms * 100 * 30
               (OS_OPT               )OS_OPT_TMR_PERIODIC, 
               (OS_TMR_CALLBACK_PTR  )TmrCallback,         
               (void                *)0,       
               (OS_ERR              *)err);                
							 					 
  OSTmrStart ((OS_TMR   *)&tmr, 
              (OS_ERR   *)err);
  
  CPU_SR_ALLOC();
  databuf_pt pt = (databuf_pt)AppCtx.uart_databuf;               
  while (1) {
    OSTimeDly(37000, OS_OPT_TIME_DLY, &err);
    
    if (pt->dbsize(pt) == pt->size) {
      OS_CRITICAL_ENTER();
      elog("ERROR: usart data buffer is overflow!!");
      pt->reset(pt);
      OS_CRITICAL_EXIT();
    }
  }
}
